package web.beans;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.bean.ViewScoped;

import ejb.dto.GiftListDTO;
import ejb.dto.PacchettoDTO;
import ejb.dto.ProdottoBaseDTO;
import ejb.managerbeans.GiftListManagerBeanLocal;
import ejb.managerbeans.UserManagerBeanLocal;

@ManagedBean(name = "giftlistBean")
@SessionScoped
public class GiftListBean {

	@EJB
	private GiftListManagerBeanLocal glmb;

	@EJB
	private UserManagerBeanLocal umb;

	private List<GiftListDTO> glsDTO;

	private String emailUser;

	private String errore;

	private GiftListDTO gfSelezionata;

	private boolean renderAddingSection;
	private boolean renderExploreGF;

	private int addedProd;
	private ProdottoBaseDTO pb;
	private PacchettoDTO p;

	private List<PacchettoDTO> pacchetti;
	private List<ProdottoBaseDTO> prodottiBase;

	private PacchettoDTO pacchettoAcquistato;
	private ProdottoBaseDTO pbAcquistato;

	@PostConstruct
	public void init() {
		glsDTO = new ArrayList<GiftListDTO>();

		gfSelezionata = new GiftListDTO();
		renderAddingSection = false;
		renderExploreGF = false;

	}

	public boolean isRenderAddingSection() {
		return renderAddingSection;
	}

	public void setRenderAddingSection(boolean renderAddingSection) {
		this.renderAddingSection = renderAddingSection;
	}

	public ProdottoBaseDTO getPb() {
		return pb;
	}

	public void setPb(ProdottoBaseDTO pb) {
		this.pb = pb;
	}

	public PacchettoDTO getP() {
		return p;
	}

	public void setP(PacchettoDTO p) {
		this.p = p;
	}

	public int getAddedProd() {
		return addedProd;
	}

	public void setAddedProd(int addedProd) {
		this.addedProd = addedProd;
	}

	public void populateList() {
		if (umb.getUserDTO(getEmailUser()) != null) {
			glsDTO = glmb.getUserGiftListDTO(getEmailUser());
			setErrore(new String());
		} else
			userNotFound();
	}

	public void populateListForAdding() {
		glsDTO = glmb.getLoggedUserGiftListDTO();

	}

	public void userNotFound() {
		errore = "Utente non trovato";
	}

	public List<GiftListDTO> getGlsDTO() {
		return glsDTO;
	}

	public String getEmailUser() {
		return emailUser;
	}

	public void setEmailUser(String emailUser) {
		this.emailUser = emailUser;
	}

	public void setGlsDTO(List<GiftListDTO> glsDTO) {
		this.glsDTO = glsDTO;
	}

	public String getErrore() {
		return errore;
	}

	public void setErrore(String errore) {
		this.errore = errore;
	}

	public GiftListDTO getGfSelezionata() {
		return gfSelezionata;
	}

	public void setGfSelezionata(GiftListDTO gfSelezionata) {
		this.gfSelezionata = gfSelezionata;
	}

	public List<PacchettoDTO> getPacchetti() {
		return pacchetti;
	}

	public void setPacchetti(List<PacchettoDTO> pacchetti) {
		this.pacchetti = pacchetti;
	}

	public List<ProdottoBaseDTO> getProdottiBase() {
		return prodottiBase;
	}

	public void setProdottiBase(List<ProdottoBaseDTO> prodottiBase) {
		this.prodottiBase = prodottiBase;
	}

	public boolean isRenderExploreGF() {
		return renderExploreGF;
	}

	public void setRenderExploreGF(boolean renderExploreGF) {
		this.renderExploreGF = renderExploreGF;
	}

	public PacchettoDTO getPacchettoAcquistato() {
		return pacchettoAcquistato;
	}

	public void setPacchettoAcquistato(PacchettoDTO pacchettoAcquistato) {
		this.pacchettoAcquistato = pacchettoAcquistato;
	}

	public ProdottoBaseDTO getPbAcquistato() {
		return pbAcquistato;
	}

	public void setPbAcquistato(ProdottoBaseDTO pbAcquistato) {
		this.pbAcquistato = pbAcquistato;
	}

	public void seleziona(String nomegf) {
		this.gfSelezionata = glmb.getGfOfUser(getEmailUser(), nomegf);
	}

	public String removeGF() {
		glmb.removeGiftList(gfSelezionata);
		return "index?faces-redirect=true";
	}

	public void addToGF() {

		switch (addedProd) {
		case 1:
			System.out.println("adding pack with id: " + p.getId() + " to gf: "
					+ gfSelezionata.getId());
			glmb.addPack(p, gfSelezionata);
			break;

		case 2:
			System.out.println("adding pb with id: " + pb.getId() + " to gf: "
					+ gfSelezionata.getId());
			glmb.addBasicProduct(pb, gfSelezionata);
			break;
		}

	}

	public void exploreGF() {
		pacchetti = gfSelezionata.getPacchetti();
		prodottiBase = gfSelezionata.getProdottiBase();
	}
}
